// Играет бот
function both_one (N) {
	var cell = [];
	var cell_free = {};
	var list_utility = [];
	for (var i=0; i<N; i++) {
		for (var j=0; j<N; j++) {
			if (array_user_1[i][j] == 0 && array_user_2[i][j]  == 0) {
				cell_free["0" + i + j] = utility_step (i, j, N);
				list_utility.splice(0, 0, utility_step (i, j, N));
			};
		};
	};
	var max_utility = Math.max.apply(Math, list_utility);
	var all_key = Object.keys(cell_free);
	all_key.sort(compareRandom);
	for (var i = 0; i < all_key.length; i++) {
		if (cell_free[all_key[i]] == max_utility) {
			cell[0] = Number(all_key[i].charAt(1));
			cell[1] = Number(all_key[i].charAt(2));
			break;
		};
	};
	array_user_2[cell[0]][cell[1]] = 1;
	draw_O (size_cell / 2 + cell[0] * size_cell, size_cell / 2 + cell[1] * size_cell, ctx1);
};

// Для вывода элемента массива в случайном порядке
function compareRandom(a, b) {
	return Math.random() - 0.5;
}

// Вычисляет "полезность" хода на эту клетку
function utility_step (k, l, N) {
	list_step = {1:[[k,0], [k,1], [k,2]],2:[[0, l], [1, l], [2, l]]};
	if (k == l) {
		list_step[3] = [[0, 0], [1, 1], [2, 2]];
	};
	if (k == N - 1 - l) {
		list_step[4] = [[0, 2], [1, 1], [2, 0]];
	};
	utility = [];
	for (var key in list_step){
		var lp = list_population(list_step[key]);
		utility.splice(0, 0, utility_situation (lp));
	};
	return Math.max.apply(Math,utility);
};

// Вычисляет "полезность" одной из ситуаций
function utility_situation (list_cell_type) {
	list_cell_type.sort();
	var result;
	var str_list = String(list_cell_type);
	switch (str_list) {
		case "1,1,1":
		result = 2;
		break;
		case "1,1,2":
		result = 3;
		break;
		case "1,1,4":
		result = 1;
		break;
		case "1,2,2":
		result = 6;
		break;
		case "1,2,4":
		result = 0;
		break;
		case "1,4,4":
		result = 5;
		break;
	};
	return result;
};

// генератор списка заселенности клеток
function list_population (data){
	var l_p = [];
	l_p[0] = type_cell (data[0]);
	l_p[1] = type_cell (data[1]);
	l_p[2] = type_cell (data[2]);
	return l_p;
};

// выбираем тип клетки
function type_cell (data){
	var result
	if (array_user_1[data[0]][data[1]] == 0 && array_user_2[data[0]][data[1]]  == 0) {
		result = 1;
	} else if (array_user_1[data[0]][data[1]] == 1) {
		result = 4;
	} else if (array_user_2[data[0]][data[1]] == 1) {
		result = 2;
	};
	return result;
};

// Играем с ботом
function game_sample_both(cell) {
	draw_X(size_cell / 2 + cell[0] * size_cell, size_cell / 2 + cell[1] * size_cell, ctx1);
	array_user_1[cell[0]][cell[1]] = 1;
	check_victory(array_user_1, 3, "Your");
	if (Victory == 0) {
		both_one (3);
		check_victory(array_user_2, 3, "Both");
	};
};

// Играем друг с другом локально
function game_user_user_local(cell) {
	if (User_ID == 1) {
		draw_X(size_cell / 2 + cell[0] * size_cell, size_cell / 2 + cell[1] * size_cell, ctx1);
		array_user_1[cell[0]][cell[1]] = 1;
		check_victory(array_user_1, 3, "User 1");
		User_ID = 2;
	} else if (User_ID == 2) {
		draw_O(size_cell / 2 + cell[0] * size_cell, size_cell / 2 + cell[1] * size_cell, ctx1);
		array_user_2[cell[0]][cell[1]] = 1;
		check_victory(array_user_2, 3, "User 2");
		User_ID = 1;
	};
};


function send_to_server(text) {
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/both', true);
  xhr.send(text);
  xhr.onreadystatechange = function() {
    if (xhr.readyState != 4) return;
    alert(xhr.responseText);
  }
}
